﻿using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

 public class SystemHotKey
 {
     /// <summary>
     /// 如果函数执行成功，返回值不为0。
     /// 如果函数执行失败，返回值为0。要得到扩展错误信息，调用GetLastError。
     /// </summary>
     /// <param name="hWnd">要定义热键的窗口的句柄</param>
     /// <param name="id">定义热键ID（不能与其它ID重复）</param>
     /// <param name="fsModifiers">标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效</param>
     /// <param name="vk">定义热键的内容</param>
     /// <returns></returns>
     [DllImport("user32.dll", SetLastError = true)]
     public static extern bool RegisterHotKey(IntPtr hWnd, int id, KeyModifiers fsModifiers, Keys vk);
 
     /// <summary>
     /// 注销热键
     /// </summary>
     /// <param name="hWnd">要取消热键的窗口的句柄</param>
     /// <param name="id">要取消热键的ID</param>
     /// <returns></returns>
     [DllImport("user32.dll", SetLastError = true)]
     public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
 	
     /// <summary>
     /// 辅助键名称。
     /// Alt, Ctrl, Shift, WindowsKey
     /// </summary>
     [Flags()]
     public enum KeyModifiers { None = 0, Alt = 1, Ctrl = 2, Shift = 4, WindowsKey = 8 }
 	
     /// <summary>
     /// 注册热键
     /// </summary>
     /// <param name="hwnd">窗口句柄</param>
     /// <param name="hotKey_id">热键ID</param>
     /// <param name="keyModifiers">组合键</param>
     /// <param name="key">热键</param>
     public static void RegHotKey(IntPtr hwnd, int hotKeyId, KeyModifiers keyModifiers, Keys key)
     {
         if (!RegisterHotKey(hwnd, hotKeyId, keyModifiers, key))
         {
             int errorCode = Marshal.GetLastWin32Error();
             if (errorCode == 1409)
             {
                 //MessageBox.Show("屏幕截图热键被占用! 请点击软件截屏设置按钮, 设置为其他热键.");
             }
             else
             {
                 MessageBox.Show("注册屏幕截图热键失败! 错误代码: " + errorCode);
             }
         }
     }
 
     /// <summary>
     /// 注销热键
     /// </summary>
     /// <param name="hwnd">窗口句柄</param>
     /// <param name="hotKey_id">热键ID</param>
     public static void UnRegHotKey(IntPtr hwnd, int hotKeyId)
     {
         //注销指定的热键
         UnregisterHotKey(hwnd, hotKeyId);
     }
 }
 
 